package main

import (
	"context"
	"fmt"
	"google.golang.org/grpc"
	"net"
	users "users_demo/service"
)

// 这里是users服务的服务处理程序结构体
type userService struct {
	// 这里需要指定这个空结构体
	users.UnimplementedUsersServer
}

// GetUser 实现服务对应的具体方法
func (s *userService) GetUser(ctx context.Context, in *users.UserGetRequest) (*users.UserGetReply, error) {
	fmt.Println("显示客户端传过来的信息", in.Email, in.Id)
	// 自定义数据返回给客户端
	u := users.User{
		Id:        string(in.Id + 1),
		FirstName: "hello",
		LastName:  in.Email,
		Age:       0,
	}
	return &users.UserGetReply{
		User: &u,
	}, nil
}

func startServer(s *grpc.Server, ll net.Listener) error {
	return s.Serve(ll)
}

func main() {
	fmt.Println("start 0 监听端口,方便后面client进行调用")
	// 0 监听端口,方便后面client进行调用
	lisService, err := net.Listen("tcp", ":3001")
	if err != nil {
		fmt.Println("启动3001运行grpc报错", err)
		return
	}
	fmt.Println("1 启用grpc")
	// 1 启用grpc
	s := grpc.NewServer()
	fmt.Println("2 新建服务的结构体 userService,同时实现这个服务所需的具体方法 GetUser() 接着向grpc注册Users服务")
	// 2 新建服务的结构体 userService,同时实现这个服务所需的具体方法 GetUser() 接着向grpc注册Users服务
	users.RegisterUsersServer(s, &userService{})
	// 3 启动服务
	fmt.Println("3 启动服务")
	//err = s.Serve(lisService)
	err = startServer(s, lisService)

	if err != nil {
		fmt.Println("启动接口监听服务失败", err)
		return
	}
	fmt.Println("服务启动成功")
}
